package com.xigua._搜索或回溯算法;

import com.xigua.TreeNode;

import java.util.ArrayList;
import java.util.List;

/**
 * @author LiRongHua
 * @Title: ${file_name}
 * @Package ${package_name}
 * @Description: 给你二叉树的根节点 root 和一个整数目标和 targetSum ，
 * 找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
 * 叶子节点 是指没有子节点的节点。
 *
 * @date 2022/3/208:33
 */
public class _剑指Offer34_二叉树中和为某一值的路径 {

    public List<List<Integer>> pathSum(TreeNode root, int target) {
        List<List<Integer>> ans = new ArrayList<>();
        if (root == null ) return ans;
        List<Integer> list = new ArrayList<>();
        dfs(target,root,list,ans);
        return ans;
    }

    void dfs(int target, TreeNode root,List<Integer> list,List<List<Integer>> ans){
        if (root == null) return;
        target -= root.val;
        list.add(root.val);
        if (root.left == null && root.right == null && target ==0){
            ans.add(list);
            return;
        }else if (root.left == null && root.right == null && target !=0){
            return;
        } else{
            List<Integer> list2 = new ArrayList<>(list);
            dfs(target,root.left,list,ans);
            dfs(target,root.right,list2,ans);
        }
    }



}
